(function(window, undefined){
 
 /**
 * 创建元素节点并返回
 */
 function create(tagName, className, parent){
 var element = document.createElement(tagName);
 element.className = className;
 parent.appendChild(element);
 return element;
 }
 
 /**
 * 数组消除重复
 */
 function clearRepeat(arr){
 var obj = {},
  result = [];
 for(var i = 0, len = arr.length; i < len; i++){
  obj[arr[i]] = 1;
 }
 for(var i in obj){
  result.push(i);
 }
 return result;
 }
 
 /**
 * 添加类名
 */
 function addClassName(element, className){
 var aClass = element.className.split(' ');
 aClass.push(className);
 aClass = clearRepeat(aClass);
 element.className = aClass.join(' ');
 }
 /**
 * 删除类名
 */
 function delClassName(element, className){
 var aClass = element.className.split(' '),
  index = aClass.indexOf(className);
 if(index > 0) aClass.splice(index, 1);
 element.className = aClass.join(' ');
 }
 
 /**
 * 检查是否含有类名
 * @param element
 * @param className
 * @returns {boolean}
 */
 function hasClassName(element, className){
 var aClass = element.className.split(' '),
  index = aClass.indexOf(className);
 if(index > 0) return true;
 return false;
 }
 
 var Pager = function(obj){
 
 this.__total = obj.total || 1;
 this.__index = obj.index || 1;
 this.__parent = obj.parent;
 this.__onchange = obj.onchange;
 //初始化分页器
 this.__init(obj);
 
 };
 
 var pro = Pager.prototype;
 /**
 * 初始化分页器
 */
 pro.__init = function(obj){
 if(this.__total < this.__index) return;
 //存储数字
 this.__numbers = [];
 //储存省略号
 this.__dots = [];
 this.__wrapper = create('div', 'pager-box', this.__parent);
 this.__body = create('div', 'pager', this.__wrapper);
 //存储上一页
 this.__preBtn = create('a', 'prev', this.__body);
 this.__preBtn.href = 'javascript:void(0);';
 this.__preBtn.innerText = (obj.label && obj.label.prev) || '上一页';
 //存储数字
 if(this.__total < 8){
  for(var i = 0; i < this.__total; i++){
  var t = create('a', 'number', this.__body);
  t.href = 'javascript:void(0);';
  t.innerText = i + 1;
  this.__numbers.push(t);
  }
 }else{
  for(var i = 0; i < 2; i++){
  var t = create('span', 'dots', this.__body);
  t.innerText = '...';
  this.__dots.push(t);
  };
  for(var i = 0; i < 7; i++){
  var t = create('a', 'number', this.__body);
  t.href = 'javascript:void(0);';
  this.__numbers.push(t);
  }
 
 }
 //存储下一页
 this.__nextBtn = create('a', 'next', this.__body);
 this.__nextBtn.href = 'javascript:void(0);';
 this.__nextBtn.innerText = (obj.label && obj.label.next) || '下一页';
 //
 this._$setIndex(this.__index);
 //
 this.__body.onclick = this.__doClick.bind(this);
 };

 pro.__doClick = function(e){
 var e = e || window.event,
  target = e.target || e.srcElement;
  e.stopPropagation();
 //点击省略号
 if(target.tagName.toLowerCase() == 'span') return;
 //点击了不能点击的上一页或者下一页
 if(hasClassName(target, 'js-disabled')) return;
 //点击了当前页
 if(hasClassName(target, 'js-selected')) return;
 
 if(target == this.__preBtn){
  //点击了上一页
  this._$setIndex(this.__index - 1);
 }else if(target == this.__nextBtn){
  //点击了下一页
  this._$setIndex(this.__index + 1);
 }else{
  //点击了数字
  var index = target.innerText;
  this._$setIndex(index);
 }
 
 };
 
 /**
 * 跳转页数
 */
 pro._$setIndex = function(index){
 if(index.length>3 || index == 'NaN'){
 	//console.log('不执行')
 } else{
 	//console.log('执行')
 	index = parseInt(index);
	 //更新信息
	 if(index != this.__index){
	  this.__last = this.__index;
	  this.__index = index;
	 }
	 //处理
	 delClassName(this.__preBtn, 'js-disabled');
	 delClassName(this.__nextBtn, 'js-disabled');
	 if(this.__total < 8){
	  //总页数小于8的情况
	  if(this.__last) delClassName(this.__numbers[this.__last - 1], 'js-selected');
	  addClassName(this.__numbers[this.__index - 1], 'js-selected');
	  if(this.__index == 1) addClassName(this.__preBtn, 'js-disabled');
	  if(this.__index == this.__total) addClassName(this.__nextBtn, 'js-disabled');
	 
	 }else{
	  this.__dots[0].style.display = 'none';
	  this.__dots[1].style.display = 'none';
	  for(var i = 0; i < 7; i++){
	  delClassName(this.__numbers[i], 'js-selected');
	  };
	  if(this.__index < 5){
	  for(var i = 0; i < 6; i++){
	   this.__numbers[i].innerText = i + 1;
	  }
	  this.__numbers[6].innerText = this.__total;
	  this.__dots[1].style.display = 'block';
	  this.__body.insertBefore(this.__dots[1], this.__numbers[6]);
	  addClassName(this.__numbers[this.__index - 1], 'js-selected');
	  if(this.__index == 1) addClassName(this.__preBtn, 'js-disabled');
	  }else if(this.__index > this.__total - 4){
	  for(var i = 1; i < 7; i++){
	   this.__numbers[i].innerText = this.__total + i -6;
	  }
	  this.__numbers[0].innerText = '1';
	  this.__dots[0].style.display = 'block';
	  this.__body.insertBefore(this.__dots[0], this.__numbers[1]);
	  addClassName(this.__numbers[this.__index + 6 - this.__total], 'js-selected');
	  if(this.__index == this.__total) addClassName(this.__nextBtn, 'js-disabled');
	  }else{
	  this.__numbers[0].innerText = '1';
	  for(var i = 1; i < 6; i++){
	   this.__numbers[i].innerText = this.__index - 3 + i;
	   if(i == 3) addClassName(this.__numbers[i], 'js-selected');
	  }
	  this.__numbers[6].innerText = this.__total;
	  this.__dots[0].style.display = 'block';
	  this.__body.insertBefore(this.__dots[0], this.__numbers[1]);
	  this.__dots[1].style.display = 'block';
	  this.__body.insertBefore(this.__dots[1], this.__numbers[6]);
	  }
 	
 }
 
 
 }
 if(typeof this.__onchange == 'function'){
  this.__onchange({
  index: this.__index,
  last: this.__last,
  total: this.__total
  })
 }
 
 };
 /**
 * 得到总页数
 */
 pro._$getIndex = function(){
 return this.__index;
 };
 /**
 * 得到上一个页数
 */
 pro._$getLast = function(){
 return this.__last;
 };
 //变成全局
 window.Pager = Pager;
 
})(window);